<?php
namespace app\admin\controller;
use think\Cache;
use think\Controller;
use think\Db;
use think\Model;
use think\Session;
use phpmailer\PHPMailer;
class Index extends Controller
{
    //跳登录界面--------------------------------------------------------------------------------------
    function index()
    {
        /*$redis=new \Redis();
        $redis->connect('127.0.0.1',6379);
        //判断用户是否点击忘记密码，默认跳登录页面login.html，1表示跳修改密码页面revise.html
        $id = I('id');
        $remember=$redis->get('remember');
        $user=$redis->get('name');
        $pwd=$redis->get('pwd');*/
        $id = I('id');
        if ($id == 1) {
            return $this->fetch('revise');
        } else {

            /*$this->assign('name',$user);
            $this->assign('pwd',$pwd);
            $this->assign('remember',$remember);*/
            return $this->fetch('login');
        }
    }

    //退出登录清除所有Session---------------------------------------------------------------------------
    public function loginOut()

    {
        //退出登录时把状态改为0；
        $admin=session('admin');
        $data=array(
            'sort'=>0
        );
        Db::table('admin')->where("username='$admin'")->update($data);
        Session::clear();
        $this->redirect('index/index');
    }
    //清除缓存日志,cookie
    public function clearlog(){

        Cache::clear();

    }

    //后台登录验证方法---------------------------------------------------------------------------------
    function login()
    {

        //记住密码-----------------------------
       // $redis = new \Redis();
       // $redis->connect('127.0.0.1', 6379);
        //1.获取登录用户的提交的信息
        $username = I('username');/*获取用户名的值*/
        $password = I('password');/*获取用户密码*/
        $passwords = md5($password);//对密码进行加密
        $code = I('verify');/*获取验证码*/
        /*$remember = I('remember');
        //记住密码
        if ($remember == 1) {
            //设置用户名和其密码得过期时间为一个星期
            $redis->set('name', $username);
            $redis->expire('name', 24 * 60 * 60 * 7);
            $redis->set('pwd', $password);
            $redis->expire('pwd', 24 * 60 * 60 * 7);
            $redis->set('remember', $remember);
            $redis->expire('remember', 24 * 60 * 60 * 7);
        }*/
        //2.判断值是否符合规定
        if (empty($username)) {
            $this->error('用户名不能为空');
        } else if (empty($password)) {
            $this->error('用户密码不能为空');
        } /*else if (!captcha_check($code)) {
            $this->error('验证码不正确');
        }*/
        //3.判断用户是否存在以及密码是否正确
        $result = new \app\admin\model\Index();
        $result = $result->index($username);
        if ($result == true) {
            if ($result['password'] == $passwords) {
                /* 权限管理查询角色表role表，
                 然后再通过节点表去node把access字段反序列化通过id去查询出登录用户拥有的权限*/
                $role = Db::table("role")->where('id=' . $result['role_id'])->find();
                //判断该管理员是否被禁止登录
                if ($role['status'] == 0) {
                    //判断此账户是否被登录，登录了后面就无法再登录
                   // if($result['sort']==0) {
                        $nodeids = implode(',', json_decode($role['access']));//反序列化权限范围id
                        $node = Db::table('node')->where("id in ($nodeids)")->select();
                        $arr = array();
                        foreach ($node as $val) {
                            $arr[] = $val['url'];
                        }
                        //$result=explode('/',$node[0]['url']);
                        session('admin', $result['username']);
                        session('sort', $result['sort']);
                        session('node', $node);//session存储登录用户所拥有的权限范围
                        session('user_id', $result['id']);
                        session('password',$passwords);
                        $data = array(
                            'login_ip' => $_SERVER ["REMOTE_ADDR"],//获取登录人员的IP地址
                            'user' => Session::get('admin'),
                            'login_time' => time(),
                        );
                        Db::table('login')->insert($data);
                        //登录成功后把状态改为1
                        /*$data = array(
                            'sort' => 1
                        );
                        Db::table('admin')->where('id=' . $result['id'])->update($data);*/
                        $this->redirect('Carousel/show');

                   /* }else{
                        $this->error('此账户已经被登录，是本人可以修改密码再登录');
                    }*/
                }
                else {
                        $this->error('该管理员被禁止登录');
                    }
                } else {
                    $this->error('密码输入错误');
                }
            } else {
                $this->error('该管理员不存在');
            }
        }

        //重置密码方法，发送邮箱---------------------------------------------------
        public
        function revise()
        {
            $username = I('username');
            $newpassword = I('password');
            $checkpassword = I('passwords');
            $code = I('code');
            $rs = Db::table('admin')->where("username='$username'")->find();
            $rs2 = Db::query('select * from email ORDER BY id DESC limit 1');//去查询当前用户邮箱最新的信息
            /*
             * 逻辑判断是否验证正确对应当前用户邮箱
             * */
            if ($rs == true) {
                if ($newpassword == $checkpassword) {
                    if ($rs['email'] == $rs2[0]['email']) {
                        if ($code == $rs2[0]['code']) {
                            $data = array('password' => md5($checkpassword));
                            $rs = Db::table('admin')->where('id=' . $rs['id'])->update($data);
                            if ($rs) {
                                $this->success('密码重置成功', 'Index/index');
                            } else {
                                $this->error('密码重置失败');
                            }
                        } else {
                            $this->error('验证码不正确');
                        }
                    } else {
                        $this->error('邮箱不正确');
                    }
                } else {
                    $this->error('两次密码不一致');
                }
            } else {
                $this->error('该管理员不存在');
            }
        }

        //发送邮件qq-------------------------------------------------------
        public
        function mailbox()
        {
            $user = $_POST['adminuser'];
            $email=$_POST['email'];
            $rs = Db::table('admin')->where("username='$user'")->find();
            $toemails = $rs['email'];
            if($email!=$toemails || $email=="null"){
                return '绑定邮箱不正确';
            }else {
                //调用发送邮件方法
                $content = rand(1000, 9999);//发送随机验证码
                if (self::sendEmail($toemails, $content)) {
                    return 1;
                } else {
                    return 0;
                }
            }
        }


        /**
         * url http://www.cnblogs.com/richerdyoung/p/6489924.html
         * 发送邮件方法
         * @param $toemail ，接收邮件账号，邮箱地址
         * @param $content ,邮件内容
         * @return bool ,返回bool值，true成功，false失败
         * @throws \Exception
         * @throws \phpmailer\phpmailerException
         */

          static  function sendEmail($toemails, $content)
        {
            $sendmail = '974162524@qq.com'; //发件人邮箱
            $sendmailpswd = "whyexbvmqcabbdfa"; //客户端授权密码,而不是邮箱的登录密码！
            $send_name = 'admin';// 设置发件人信息，如邮件格式说明中的发件人，
            $toemail = $toemails;//定义收件人的邮箱
            $to_name = '后台管理员修改密码';//设置收件人信息，如邮件格式说明中的收件人
            $mail = new PHPMailer();
            $mail->isSMTP();// 使用SMTP服务
            $mail->CharSet = "utf8";// 编码格式为utf8，不设置编码的话，中文会出现乱码
            $mail->Host = "smtp.qq.com";// 发送方的SMTP服务器地址
            $mail->SMTPAuth = true;// 是否使用身份验证
            $mail->Username = $sendmail;//// 发送方的
            $mail->Password = $sendmailpswd;//客户端授权密码,而不是邮箱的登录密码！
            $mail->SMTPSecure = "ssl";// 使用ssl协议方式
            $mail->Port = 465;//  qq端口465或587）
            $mail->setFrom($sendmail, $send_name);// 设置发件人信息，如邮件格式说明中的发件人，
            $mail->addAddress($toemail, $to_name);// 设置收件人信息，如邮件格式说明中的收件人，
            $mail->addReplyTo($sendmail, $send_name);// 设置回复人信息，指的是收件人收到邮件后，如果要回复，回复邮件将发送到的邮箱地址
            //$mail->addCC("xxx@qq.com");// 设置邮件抄送人，可以只写地址，上述的设置也可以只写地址(这个人也能收到邮件)
            //$mail->addBCC("xxx@qq.com");// 设置秘密抄送人(这个人也能收到邮件)
            //$mail->addAttachment("bug0.jpg");// 添加附件
            $mail->Subject = "这是一个测试邮件";// 邮件标题
            $mail->Body = $content;// 邮件正文
            //$mail->AltBody = "This is the plain text纯文本";// 这个是设置纯文本方式显示的正文内容，如果不支持Html方式，就会用到这个，基本无用

            if (!$mail->send()) {// 发送邮件
                echo "Message could not be sent.";
                echo "Mailer Error: " . $mail->ErrorInfo;// 输出错误信息
            } else {
                echo '发送成功';
            }
            $data = array(
                'email' => $toemails,
                'code' => $content,
            );
            Db::table('email')->insert($data);
        }
    }

